package com.xxmw.transaction.enumeration;

/**
 * 统一使用火币订单交易类型
 * 当前火币的订单类型是由买卖方向以及订单操作类型组成，例如：buy-market，buy为买卖方向，market为操作类型。
 * 买卖方向：
 *
 * buy : 买
 * sell: 卖
 * 订单种类:
 * limit : 限价单，该类型订单需指定下单价格，下单数量。
 * market : 市价单，该类型订单仅需指定下单金额或下单数量，不需要指定价格，订单在进入撮合时，会直接与对手方进行成交，直至金额或数量低于最小成交金额或成交数量为止。
 * limit-maker : 限价挂单，该订单在进入撮合时，只能作为maker进入市场深度,若订单会被成交，则撮合会直接拒绝该订单。
 * ioc : 立即成交或取消（immediately or cancel），该订单在进入撮合后，若不能直接成交，则会被直接取消（部分成交后，剩余部分也会被取消）。
 * stop-limit : 止盈止损单，设置高于或低于市场价格的订单，当订单到达触发价格后，才会正式的进入撮合队列。
 * @author luowenliang
 * @since 2020/2/25 17:45
 */
public enum TradeTypeEnum {
    /**
     * 市价买单
     */
    BUY_MARKET(1, "buy-market"),
    /**
     * 市价卖单
     */
    SELL_MARKET(2, "sell-market"),
    /**
     * 限价买
     */
    BUY_LIMIT(3, "buy-limit"),
    /**
     * 限价卖
     */
    SELL_LIMIT(4, "sell-limit");
//        BUY_IOC(),
//        SELL_IOC(),
//        BUY_LIMIT_MAKER(),
//        SELL_LIMIT_MAKER(),
//        BUY_STOP_LIMIT(),
//        SELL_STOP_LIMIT()

    private int value;

    private String desc;

    TradeTypeEnum(int value, String desc) {
        this.value = value;
        this.desc = desc;
    }

    public int getValue() {
        return value;
    }

    public String getDesc() {
        return desc;
    }

    public static String getDescByValue (Integer value) {
        for (TradeTypeEnum tradeType : TradeTypeEnum.values()) {
            if (tradeType.getValue() == value) {
                return tradeType.getDesc();
            }
        }
        return null;
    }
}
